package manong.constant;
import org.codehaus.jackson.annotate.JsonIgnore;
import org.codehaus.jackson.map.annotate.JsonSerialize;

import java.io.Serializable;

@JsonSerialize(include = JsonSerialize.Inclusion.NON_NULL)//这个注解用于 Jackson，这是一个用于处理 JSON 的流行 Java 库。它指定了当将此类的实例序列化为 JSON 时
//具有 null 值的属性应该被省略。
public class ServerResponse<T> implements Serializable {//用于表示来自服务器或某个操作的响应。它是一个泛型类，意味着可以保存任何类型的数据。

    private int status;//表示响应的状态的整数
    private String msg;//可以保存响应的消息或描述的字符串。
    private T data;//一个泛型类型，可以保存与响应相关的主要数据。

    private ServerResponse(int status) {
        this.status = status;
    }

    private ServerResponse(int status, T data) {
        this.status = status;
        this.data = data;
    }
//个私有构造函数，具有不同的参数组合，用于创建具有不同信息（状态、消息和数据）的 ServerResponse 实例。这些构造函数是重载的，以支持不同的情况。
    private ServerResponse(int status, String msg, T data) {
        this.status = status;
        this.msg = msg;
        this.data = data;
    }

    private ServerResponse(int status, String msg) {
        this.status = status;
        this.msg = msg;
    }

    @JsonIgnore
    public boolean isSuccess() {
        return this.status == 0;
    }// 该方法检查响应是否被视为成功。如果 status 等于 0，表示成功，则返回 true，否则返回 false。

    public int getStatus() {
        return status;
    }//用于获取 status 属性的 getter 方法。

    public T getData() {
        return data;
    }//用于获取 data 属性的 getter 方法。

    public String getMsg() {
        return msg;
    }//用于获取 msg 属性的 getter 方法。

    public static <T> ServerResponse<T> createBySuccess() {
        return new ServerResponse<T>(0);
    }//创建一个 ServerResponse 实例，状态为 0（表示成功），没有消息或数据。

    public static <T> ServerResponse<T> createBySuccessMessage(String msg) {
        return new ServerResponse<T>(0, msg);
    }//创建一个成功的响应，带有自定义消息但没有数据。

    public static <T> ServerResponse<T> createBySuccess(T data) {
        return new ServerResponse<T>(0, data);
    }// 创建一个成功的响应，带有提供的数据但没有自定义消息。

    public static <T> ServerResponse<T> createBySuccess(String msg, T data) {
        return new ServerResponse<T>(0, msg, data);
    }// 创建一个成功的响应，带有自定义消息和提供的数据。

    public static <T> ServerResponse<T> createByError() {
        return new ServerResponse<T>(1, "失败");
    }//创建一个状态为 1 的错误响应，带有默认的 "失败" 消息，没有数据。

    public static <T> ServerResponse<T> createByErrorMessage(String errorMessage) {
        return new ServerResponse<T>(1, errorMessage);
    }//创建一个带有自定义错误消息、状态为 1 且没有数据的错误响应。

    public static <T> ServerResponse<T> createByErrorCodeMessage(int errorCode, String errorMessage) {
        return new ServerResponse<T>(errorCode, errorMessage);
    }// 创建一个带有自定义错误代码、错误消息且没有数据的错误响应。
    
    //这个类旨在提供一种标准化的方式来表示来自服务器的响应，特别是在希望以结构化格式传达状态、消息和一些数据的情况下。使用泛型（T）允许在响应中包含不同类型的数据，增加了灵活性。
    
}
